package com.hdd.fmh.common.response;

import com.hdd.fmh.common.response.cache.ResultCodeCache;

/**
 * @author HH
 */
public class ResultUtils {

    public static ResultCodeCache rCode = ResultCodeCache.getInstance();
    private static ResultVo<Object> rv  = new ResultVo<>(rCode.getCode("common.success"),rCode.getMsgZh("common.success"),true);

    /**
     * 成功信息并数据返回方法
     * 系统默认是成功  底层使用了 code 错误对应的 配置文件的 ServiceResultCode.xml 节点组合码
     * 列如：
     *		<type id="common" code="00">
     *				<item ident="sucess" pre="0" code="0" msgZh="请求成功" msgEn="Request successful"/>
     *		</type>
     *
     * @return
     *   错误码：      code =000
     * 	  中文提示：   msgZh ="请求成功"
     *   英文提示：  msgEn="Request successful"
     *   成功状态：  success =true
     *   返回的数据： data={} -----> 数据为参数t传入的数据
     *   返回格式如下：
     *   {
     *   	code:000,
     *   	msgZh:"请求成功",
     *   	msgEn:"Request successful",
     *   	success:true,
     *   	data:{}-----> 数据为参数t传入的数据
     *   }
     */
    public static <T> ResultVo<T> success(T data){
        ResultVo<T>  rvDb = success();
        rvDb.setData(data);
        return rvDb;
    }

    /**
     * 成功信息并数据返回方法
     * 系统默认是成功  底层使用了 code 错误对应的 配置文件的 ServiceResultCode.xml 节点组合码
     * 列如：
     *		<type id="common" code="00">
     *				<item ident="sucess" pre="0" code="0" msgZh="请求成功" msgEn="Request successful"/>
     *		</type>
     *
     * @return
     *   错误码：      code =000
     * 	  中文提示：   msgZh ="请求成功"
     *   英文提示：  msgEn="Request successful"
     *   成功状态：  success =true
     *   返回的数据： data={} -----> 数据为参数t传入的数据
     *   返回格式如下：
     *   {
     *   	code:000,
     *   	msgZh:"请求成功",
     *   	msgEn:"Request successful",
     *   	success:true,
     *   	data:{}-----> 数据为参数t传入的数据
     *   }
     */
    public static <T> ResultVo<T> success(){
        return (ResultVo<T>)rv;
    }

    /**
     * @param code
     * @param <T>
     * @return
     */
    public static <T> ResultVo<T> fail(String code){
        if(code.equals("common.success")) {
           return (ResultVo<T>)rv;
        }
        rv.setSuccess(false);
        rv.setMsg(rCode.getMsgZh("common.fail"));
        rv.setCode(rCode.getCode("common.fail"));
        return (ResultVo<T>)rv;
    }

    /**
     *
     * @param msg
     * @param <T>
     * @return
     */
    public static <T> ResultVo<T> sysError(String msg){
        rv.setSuccess(false);
        rv.setMsg(msg);
        rv.setCode(rCode.getCode("common.sys.error"));
        return (ResultVo<T>)rv;
    }

    /**
     * 请求参数错误
     * @param <T>
     * @return
     */
    public static <T> ResultVo<T> param(){
        rv.setSuccess(false);
        rv.setMsg(rCode.getMsgZh("common.param.error"));
        rv.setCode(rCode.getCode("common.param.error"));
        return (ResultVo<T>)rv;
    }
    /**
     * 错误信息返回
     * 列如：
     * 	<type id="role" code="10">
     *		<item ident="have.name" pre="0" code="0" msgZh="名称已存在" />
     *	</type>
     * 则code 码为：		role.have.name
     * @return
     *   错误码：      code =1000
     * 	  中文提示：   msgZh ="名称已存在"
     *   英文提示：  msgEn="Name already exists"
     *   成功状态：  success =false
     *  返回格式如下：
     *   {
     *   	code:1000,
     *   	msgZh:"名称已存在",
     *   	msgEn:"Name already exists",
     *   	success:false
     *   }
     */
    public static <T> ResultVo<T> fail(){
        rv.setSuccess(false);
        rv.setMsg(rCode.getMsgZh("common.fail"));
        rv.setCode(rCode.getCode("common.fail"));
        return (ResultVo<T>)rv;
    }

    public static <T> ResultVo<T> back(Integer... args){
        Boolean isSuccess = true;
        for (int i = 0; i < args.length; i++) {
            if(args[i]<1) {
                isSuccess =false;
            }
        }
        return isSuccess?success():fail();
    }

}
